import java.util.Map;
import java.util.TreeMap;

public class MapDemo {

    public static void main(String[] args) {
        //构建一个TreeMap
        Map<String,String> map = new TreeMap<>();

        //put(key,value):插入key-value键值对
        //如果key不存在，会将key-value的键值对插入到map中，返回null
        //key : 梁山好汉的名字 value:梁山好汉的绰号
        map.put("林冲","豹子头");
        map.put("鲁智深","花和尚");
        map.put("武松","行者");
        map.put("宋江","及时雨");

        String str = map.put("李逵","黑旋风");
        System.out.println(map.size());
        System.out.println(map);

        //put(key,value):注意key不能为空，但是value可以为空
        //key如果为空，会抛出空指针异常
        //map.put(null,"无名");
        str = map.put("无名",null);
        System.out.println(map.size());

        //put(key,value):
        //如果key存在，会使用value替换原来key所对应的value,返回旧的value
        str = map.put("李逵","铁牛");
        System.out.println(str);

        //get(key):返回key所对应的value
        //如果key存在，返回key所对应的value
        //如果key不存在,返回null
        System.out.println(map.get("鲁智深"));
        System.out.println(map.get("史进"));

        //getOrDefault():如果key存在，返回与key所对应的value，
        // 如果key不存在，返回一个默认值
        System.out.println(map.getOrDefault("李逵","铁牛"));
        System.out.println(map.getOrDefault("史进", "九纹龙"));
        System.out.println(map.size());

        //containKey(key):检测key是否包含在Map中，时间复杂度:O(log N)
        //按照红黑树的性质进行查找
        //找到返回true，否则返回false
        System.out.println(map.containsKey("林冲"));
        System.out.println(map.containsKey("史进"));

        //containValue(value):检测value是否包含在Map中，时间复杂度:O(log N)
        //找到返回true,否则返回false
        System.out.println(map.containsValue("豹子头"));
        System.out.println(map.containsValue("九纹龙"));

        //打印所有的key
        //keySet是将map中的key存储在Set中返回的
        for (String s : map.keySet()) {
            System.out.print(s + " ");
        }
        System.out.println();

        //打印所有的value
        //values是将map中所有的value放在一个Collection集合中返回的
        for (String value : map.values()) {
            System.out.print(value + " ");
        }
        System.out.println();

        //打印所有的键值对
        //entrySet():将Map中的键值对放在Set中返回了
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.print(entry.getKey() + "--->" + entry.getValue() + " ");
        }
        System.out.println();
    }
}
